package com.jincp.common.utils;

import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

public class PatternCheck {

    /**
     * Email检查. 具体格式未知.
     */
    public static final String IS_EMAIL = "^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$";


    /**
     * 有效的手机号码
     */
    public static final String IS_MOBILE = "^(1)[0-9]{10}$";

    /**
     * 有效的身份证号码
     */
    public static final String IS_ID = "^(\\d{15}$|^\\d{18}$|^\\d{17}(\\d|X|x))$";


    /**
     * URL地址检查
     */
    private final static String IS_URL = "^(https|http)://.*?";

    /**
     * 密码复杂度要求：6密码，只能是字母，数字的组合
     * 至少包含一位大写字母，
     * 至少包含一位数字
     * 用预判的方法来写正则
     * 1.不全有小写字母或数字组成，这里必须包含（大写或字符）	(?![a-z0-9]*$)
     * 2.不全有大写字母或小写字母组成，这里必须包含（数字或字符）	(?![a-zA-Z]*$)
     * 3.六位密码，只能是字母，数字的组合，（这里就剔除了字符）	[0-9a-zA-Z]{6}
     * ^(?![a-z0-9]*$)(?![a-zA-Z]*$)[0-9a-zA-Z]{6}$
     */
    private final static String IS_PASSWORD_1 = "^(?![^a-zA-Z]+$)(?!\\D+$).{6}$";

    /**
     * 密码复杂检查 至少一个大写字母，一个小写字母和一个数字
     */
    private final static String IS_PASSWORD_2 = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[a-zA-Z\\d]{8,}$";


    /**
     * 有效数组
     */
    private final static String IS_NUMBER = "[0-9]*";

    /**
     * 有效性检查.
     *
     * @param formValue    字符串值
     * @param formatString 字符串格式
     * @return ture or false
     */
    public static boolean validateFormat(String formValue, String formatString) {
        boolean match = true;
        if (formatString == null || formatString.trim().length() == 0) {
            return match;
        }
        try {
            match = Pattern.matches(formatString, formValue);
        } catch (PatternSyntaxException e) {
        }
        if (!match) {
        }
        // add check character '
        if ((formValue.indexOf("'")) >= 0) {
            match = false;
        }
        return match;
    }


    /**
     * 判断是否是有效的Email.
     *
     * @param value 字符串值
     * @return true or false
     */
    public static boolean isEmail(String value) {
        return validateFormat(value, IS_EMAIL);
    }

    /**
     * 判断是否是有效的手机号码.
     *
     * @param value 字符串值
     * @return true or false
     */
    public static boolean isMobile(String value) {
        return validateFormat(value, IS_MOBILE);
    }

    /**
     * 判断是否是有效的身份证.
     *
     * @param value 字符串值
     * @return true or false
     */
    public static boolean isID(String value) {
        return validateFormat(value, IS_ID);
    }

    /**
     * 判断是否为一个合法的url地址
     *
     * @param value
     * @return
     */
    public static boolean isUrl(String value) {
        return validateFormat(value, IS_URL);
    }

    /**
     * 判断是否为一个数组格式
     *
     * @param value
     * @return
     */
    public static boolean isNumber(String value) {
        return validateFormat(value, IS_NUMBER);
    }

    /**
     * 判断是否为一个密码复杂度
     *
     * @param value
     * @return
     */
    public static boolean isPassword(String value) {
        return validateFormat(value, IS_PASSWORD_1);
    }
}
